计算机网络(五)——应用层

应用层的具体内容就是规定应用进程在通信时所要遵循的协议。
应用层的许多协议都是基于客户-服务器方式。

DNS(domain name system,域名系统,端口号53)

因特网的域名系统被设计为一个联机分布式数据库系统,并使用客户服务器方式。
域名服务器:完成域名到IP地址的解析,还具有连到其它域名服务器的信息。

因特网的域名结构

层次树状结构:*.三级域名.二级域名.一级域名
各级域名由其上级域名管理机构管理。

用域名服务器进行域名解析

域名服务器能够将域名解析到IP地址,同时还具有连向其它域名服务器的信息。
三种域名服务器:
本地域名服务器(local name server,也叫默认域名服务器):本地域名服务器距离主机较近,一般不超过几个路由的距离。当主机发出DNS(域名系统)查询报文时,它首先被送往该主机的本地域名服务器;
根域名服务器(root name server):目前因特网上有十几个根域名服务器,大部分在北美。当一个本地域名服务器不能回答某个主机的查询时,该本地域名服务器就以DNS客户的身份向某一个根域名服务器查询;
授权域名服务器(authoritative name server):每一个主机都必须在授权域名服务器处登记。一个主机的授权域名服务器就是它的ISP(因特网服务提供商)的一个本地域名服务器,它总能将管辖范围内的主机名转换为主机的IP地址。将本单位的域名划分为若干域名服务器管辖区(zone),在各管辖区内设置授权域名服务器。

使用名字的高速缓存可以优化查询的开销。每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字的映射信息。
并发:两个进程交替执行;并行:同时。

FTP(file transfer protocol,文件传送协议,端口号21)

文件共享协议。
FTP:基于TCP。只提供一些基本的服务,主要功能是减少或消除在不同操作系统下处理文件的不兼容性。

特点

复制整个文件。若要存取一个文件,就必须先获得文件的副本;若要修改文件,只能对文件的副本进行修改,然后将修改后的文件副本传回原结点。

FTP的工作原理

本地主机运行客户进程,远程主机运行服务器进程。服务器有一个主进程,负责等待新的请求,有多个从属进程,用来处理单个请求。

缺点

在计算机A上运行的应用程序要在远程计算机B的很大的文件末尾添加一行信息,若使用FTP,需要先将文件从B传到A,在A上添加信息后,再将文件传送给B。而NFS(网络文件系统,network file system)弥补了这个缺点,它允许应用进程打开一个远程文件,并能在该文件的某个特定位置上读写数据。

FTP交互式工作的一些命令

230服务就绪;331用户命令正确;CWD(change working directory,切换工作路径);PORT建立数据连接;200命令正确;150文件状态正确,即将建立数据连接;226释放数据连接;quit退出。

TFTP(trivial file transfer protocol,简单文件传输协议,端口号69)

TFTP:基于UDP,因此需要有自己的差错改正措施。它只传输文件而不进行交互。

工作原理

与停止等待协议很像。A发送完一个文件块就等待B确认,确认时应指明所确认的编号。A发完后若在规定时间内收不到确认就要重发数据PDU。B发送确认PDU若在规定时间内收不到下一个文件块,也要重发确认PDU。保证文件的传输不因某一个数据报的丢失而失败。
PDU(protocol data unit,协议数据单元):即报文。
TFTP有五种PDU(协议数据单元、报文):读请求PDU、写、数据、确认、差错。

每种PDU的第一个字段是操作码字段,分别为1~5。读或写PDU中的方式字段用来区分不同的类型文件(如ASCII或二进制文件)

优缺点

优点:可用于UDP环境,如需要将程序和文件同时向许多机器下载时;TFTP代码所占的内存小。
缺点:基于UDP,需要有自己的差错改正措施;只支持文件传输不支持交互;没有庞大的命令集,没有列目录的功能,也不能对用户身份进行鉴别。

TELNET(远程终端协议,端口号23)

TELNET通过TCP连接注册(登录)到远程主机。能够将用户的击键传递到远程主机,同时也能将远程主机的输出通过TCP连接返回到屏幕。

工作原理

与FTP类似。本地主机运行客户进程,远程主机运行服务器进程。服务器有一个主进程,负责等待新的请求,有多个从属进程,用来处理单个请求。

NVT(network virtual terminal,网络虚拟终端)

TELNET能够适应不同的操作系统,不同操作系统要实现相同的功能命令可能不一样,NVT将命令转换成远程服务器需要的格式;当用户数据返回时,NVT将远程服务器的格式转换为本地需要的格式。
NVT格式:8bit,高位为1用作控制命令,低7位使用ASCII码传送数据。
同时TELNET自己也通过选项协商(option negotiation)定义了一些控制命令。DO WILL, DO WON’T, WILL DO, WILL DON’T。
TELNET将225代码规定为IAC(interpret as command,解释为命令),出现在IAC之后的一个字节,才是TELNET命令。

电子邮件(发送协议:SMTP端口号25,接收协议:POP3(或IMAP))

发件人的用户代理向源邮件服务器发送邮件,以及源邮件服务器向目的邮件服务器发送邮件:SMTP;
用户从目的邮件服务器上读取邮件:POP3或IMAP。

电子邮件系统的组成

用户代理(user agent)

用户代理用户与电子邮件系统的接口,通常就是电子邮件的窗口界面。具有撰写、显示、处理功能。

邮件服务器

邮件服务器基于客户-服务器模式工作。主要功能是发送和接收邮件,同时向发信人报告邮件传送情况。有两个协议:一个用于发送邮件,即SMTP协议;一个用于接收邮件,即POP(post office protocol,邮局协议)。
邮件服务器既可以是客户,又可以是服务器。当A向B发邮件,A是客户;当A从B收邮件,A是服务器。

工作过程

由于邮件服务器(程序)必须不间断地运行,因此不在计算机上运行邮件服务器程序,而是将来信暂存在ISP(Internet server provider,因特网服务提供商)的邮件服务器中。
电子邮件由信封(envelope)和内容(content)两部分组成。电子邮件的传输程序通过信封上的信息来传送邮件。
TCP/IP体系的电子邮件地址(email address)格式:收件人邮箱名@邮箱所在主机的域名。

SMTP(simple mail transfer protocol,简单邮件传送协议,端口号25)

SMTP规定了两个相互通信的SMTP进程应该如何交换信息。

SMTP通信的三阶段

建立连接、邮件传送、连接释放。发件服务器每发送一个命令,都应该有相应的信息从SMTP服务器返回。
a. 建立连接
220 service ready(服务就绪)、250 OK(有能力接收邮件)、421 service not available(服务不可用)
b. 邮件传送
MAIL FROM: <发件人邮箱地址>命令:若SMTP服务器已经准备好接收邮件,则回到250 OK;否则返回一个代码指示原因,如451(处理出错)、452(存储空间不够)、500(命令无法识别)等。
RCPT TO:<收件人邮箱地址>命令:先弄清接收端是否已经准备好接收邮件,然后才发送邮件。550 No such user here(无此用户)。
DATA命令:开始传送邮件内容。SMTP服务器返回354 Start mail input; end with <CRLF>.<CRLF>。
表示回车换行符,若不能接收邮件,则返回421(服务器不可用),500等。接着SMTP客户开始发送邮件内容。发送完毕后再发送<CRLF>.<CRLF>,邮件内容结束。若SMTP服务器收到邮件则返回250 OK,否则返回差错代码。
CR:carriage return回车;LF:line feed换行。
c. 连接释放
邮件发送完毕后,SMTP客户发送QUIT命令。服务器返回221(服务关闭),SMTP同时释放TCP连接。

邮件内容

To: Subject: Cc:(carbon copy,复写副本)

缺点

SMTP(simple mail transfer protocol,简单邮件传送协议),只能传送7位ASCII码邮件,不能传送可执行文件或其它的二进制对象;(ASCII码本来只有7位,后来为了增加检错能力在高位增加了奇偶校验位,因此使用8 bit代表一个ASCII码,最高位一定是0。)
服务器会拒绝超过一定长度的邮件。

MIME(multipurpose Internet mail extension,通用因特网邮件扩充)

为了弥补SMTP协议缺点,MIME并没有取代SMTP,而是增加了邮件主体的结构,并定义了传送非ASCII码的编码规则。

一个汉字占两个字节。

POP3、IMAP(邮件读取协议)

注意:ISP邮件服务器-(TCP连接)用户代理(用户PC)是固定的名称,而POP3服务器(程序),POP3客户端(程序)则是发信过程对ISP邮件服务器和用户代理的叫法。

POP3(post office protocol,邮局协议第3版本)

POP协议的特点:只要收件方从POP服务器读取了邮件,POP服务器就将该邮件删除。因此不能在其它PC上处理邮件。因此POP3扩充了一些功能,如用户能事先设置邮件被读取后仍存放在POP3服务器中的时间。

IMAP4(Internet message access protocol,因特网报文存取协议)

优点:IMAP可以使用户可以在自己的PC上操作ISP服务器中的邮件;用户在不同的地方使用不同的计算机随时阅读或处理自己的邮件。
缺点:如果用户没有将邮件复制到自己的PC上,邮件将一直放在IMAP服务上,因此用户需要经常与IMAP服务器建立连接。

WWW(world wide web,万维网)

万维网是一个分布式的超媒体(hypermedia)系统,是超文本(hypertext)系统的扩充。

URL(uniform resource locator,统一资源定位符)

URL用来标识分布在整个因特网上的万维网文档。

URL的一般形式

<URL的访问方式>://<主机>:<端口>/<路径>
其中,URL访问方式中,最常用的是http,ftp,news(USENE新闻)。默认端口号、路径可以省略,主机不可省略。URL中的字母不区分大小写。

使用http的URL

http://<主机>:<端口>/<路径>

缺点

URL必须指向一个特定的主机,如果有的页面被频繁访问,网络通信量可能比较大。而URI(universal resource identifier,通用资源标志符)使资源的名字与位置无关。URI包括了URL和URN(uniform resource name,统一资源名字),可看成是URL的一种扩展。

HTTP(hypertext transfer protocol,超文本传输协议)

关于HTTP协议的详细报文结构和用法可参见javaweb学习总结(四)——Http协议
HTTP可实现万维网上各种超链的链接。HTTP是应用层协议,使用TCP连接进行可靠的传送。
用户在屏幕点击了超链后:浏览器分析超链指向的URL;浏览器向DNS请求将域名解析为IP地址;浏览器与服务器建立TCP连接;服务器给出相应,将所需文件发送给浏览器;释放TCP连接;浏览器显示文件的所有文本。

特点

面向事务的客户-服务器协议,是无状态的(stateless,同一客户多次访问同一服务器上的页面时,服务器的响应与第一次相同);HTTP协议本身是无连接的,虽然它使用了面向连接的TCP向上提供服务。
用户通过拨号方式连接到因特网,使用PPP协议与ISP接通,待ISP为用户分配一个临时IP后,用户才能浏览WWW。(面向字节的链路层控制协议:PPP(point-to-point,点对点)协议)

万维网高速缓存(Web cache)

万维网高速缓存是一种网络实体,能代替浏览器发出HTTP请求,因此也叫代理服务器(proxy server)。它将最近的一些请求和相应暂存在本地磁盘中,当新请求与暂存的请求相同时,则将暂存的响应发出去,不需要按URL的地址去因特网上访问该资源。

HTTP的报文结构

有两种报文:请求报文和响应报文。

可以看出请求报文和响应报文由三部分组成,它们只有第一行不同。
a. 请求报文
请求行:有方法、URL、版本。
方法:对请求的对象进行操作,即一些常用的命令;

URL:请求资源的URL;
版本:HTTP的版本。
b. 响应报文
状态行:版本、状态码、短语。
版本:HTTP版本;
状态码(status code):5大类共33种;

1--:通知信息,如请求收到了或正在进行处理 2--:成功,如接受或知道了 3--:重定向,要完成请求还必须采取进一步行动 4--:客户的差错,如请求中有错误的语法或不能完成 5--:服务器差错,如服务器失效无法完成请求。

短语:解释状态码的简单短语。

HTML(hypertext markup language,超文本标记语言)

HTML格式与标签

计算机的字处理器多样,HTML是一种排版语言。
标签:用于排版的命令。
HTML文档是一中可以用任何文本编辑器创建的ASCII码文件,文件名后缀为.html。
HTML中有三个字符具有特殊意义:< 表示一个标签开始;> 表示一个标签结束;& 表示转义序列开始,以分号结束。&\lt; &\gt; &\amp; &\copy表示版权符号。
标签<PRE>表示已排版(preformatted)

网页中的超链

远程链接:<a href = “链接地址”> 链接</a>,h代表超文本,ref表示reference(访问,引用)。
本地链接。
文本的内连接使用命名锚(name anchor),若链接的终点abc的前面,则文档内链接为:
<a name=destination>abc</a>。
静态文档:文档创作完成后放在服务器中,用户浏览过程中不会改变。

动态文档与CGI程序(CGI脚本)

文档的内容是在浏览器访问服务器时,服务器运行另一个应用程序,并将控制转移到此程序。如股市、天气预报、售票等。
CGI(common gateway interference,通用网关接口)标准:定义了动态文档应该如何创建,输入数据应该如何提供给应用程序,输出结果应该如何使用。
在万维网服务器中新增的应用程序叫CGI程序(CGI脚本(CGI script))。

脚本(script):是一个程序,它被另一个程序(解释程序)执行,而不是计算机的处理机来执行。有一些语言专门作为脚本语言,如Perl,JavaScript等,脚本也可用常用的语言写出,如C,C++等。脚本语言可以更容易更快地进行编码,但脚本运行起来比一般的编译程序要慢,因为它的每一条指令要先被另一个程序(解释程序)执行,而不是被计算机指令处理机直接执行。

表单(form)

在创建动态文档时,表单常和CGI程序一起使用,

标签中首先要声明一个action参数,指出万维网服务器中的CGI程序在何处,一般就是指明一个URL或URI。
<input>标签表示用户需要输入的项目。
浏览器向CGI程序发送的数据格式:name1=valuable1&name2=valuable2&…,其中变量中的特殊字符用%+字符的ASCII码,如空格:%20,@符号:%40

活动万维网文档

动态文档一旦建立,它所包含的信息内容也就固定下来而无法及时刷新。为了让屏幕连续刷新,有几种技术可以实现:
a. 服务器推送(server push)技术:将所有工作交给服务器,服务器不断运行与动态文档相关联的应用程序。可能造成服务器的过多开销;
b. 活动文档(active document)技术:将所有工作转移给浏览器端。每当浏览器请求一个活动文档时,服务器端就返回一个程序副本,使该程序副本在浏览器端执行;
c. Java技术:Java中的applet(小应用程序)是用来描述活动文档的程序。
Java提高高级图形接口软甲:AWT(abstract window toolkit,抽象窗口工具箱)

万维网信息检索系统

万维网上的信息检索程序叫搜索引擎(search engine)。
为了检索,将网页标题中的关键字作为索引,索引算法包含三种数据结构:一个线性数组url_table,存放已经找到的URL;每个页面都有一项,每项两个指针,一个指向页面的URL,一个指向标题。由于URL和标题是可变长的,因此使用堆(heap)来存放它们;由于URL数量太大,使用长度为n的hash表,每个URL被hash后都产生一个小于n的数,hash值相同的URL连接到同一个链表后面。
搜索引擎的核心是递归过程process_url。

BOOTP和DHCP

BOOTP(bootstrap protocol,引导程序协议)

BOOTP使用UDP来使一个无盘工作站自动获取配置信息,它是一个静态配置协议。计算机发送BOOTP请求报文时自己还没有IP地址,因此它用全0作为源地址,用全1作为目的地址(本网络上广播地址)。
BOOTP只发送一个广播报文就可以获取全部的配置信息,而RARP可获取IP地址(将物理地址解析成IP地址),ICMP可获取子网掩码(ICMP的询问报文有四种,其中有掩码地址请求和回答)。

DHCP(dynamic host configuration protocol,动态主机配置协议)

BOOTP由于使用静态配置协议,当主机移动到另一个网络或需要一个临时IP地址时,需要管理员手动修改数据库中主机的地址绑定信息。而DHCP为即插即用网络(plug-and-play networking),它是对BOOTP的扩展,它允许计算机加入新的网络和获取IP地址都是自动的。
DHCP分配给DHCP用户的IP地址是临时的,因此它有租用期(lease period),DHCP只能在有限时间内使用这个IP地址,具体时限由服务器决定。

SNMP(simple network management protocol,简单网络管理协议)

SNMP的重要思想是尽可能简单。

管理程序(图中的M): 管理站是整个网络管理系统的核心,通常是个有良好图像界面的高性能工作站,并由网络管理员直接操作和控制。其中的关键构件是管理程序,管理程序运行时成为管理进程。
代理程序(图中的A):在每个被管设备中都要运行一个程序与管理站中的管理程序进行通信。
网络管理(网管)协议:管理程序和代理程序之间通信的规则。
系统管理的5个功能域:故障管理(fault management)、配置管理(configuration management)、计费管理(accounting management)、性能管理(performance management)、安全管理(security management)。

应用进程跨越网络的通信

系统调用和应用编程接口

大多数操作系统使用系统调用(system call)机制在应用程序和操作系统之间传递控制权。
API(application programming interface,应用个编程接口):应用层和传输层之间的一种接口,称为socket API。

服务器工作的两种方式

循环方式(iterative mode):在计算机中只运行一个服务器进程,当有多个客户进程同时请求服务时,服务器进程就按请求的先后顺序做出响应;
并发方式(concurrent mode):在计算机中可以运行多个服务器进程,每个服务器进程都对某个特定的客户进程做出响应。
a. 无连接循环服务器
使用无连接的UDP服务器通常都工作在循环方式。主要特点是一个服务器在同一时刻只能向一个客户提供服务。
b. 面向连接并发服务器
使用面向连接的TCP服务器通常都工作在并发方式。主要特点是一个服务器在同一时刻可以向多个客户提供服务。由于是面向TCP连接,因此服务器和多个客户之间必然建立多条连接,而每一条连接需要等数据传送完后才能释放。
由于服务器使用一个端口提供服务,因此并发服务器采用这样的工作方式:一个主服务器(即原来的服务器)在熟知端口等待客户请求,一旦收到客户请求就立即创建从属服务器,从属服务器使用临时端口与客户建立连接。